/*
 * @Author: 赵宇
 * @Description:
 * @Date: 2024-03-04 17:12:41
 * @LastEditTime: 2024-04-24 12:28:54
 * @LastEditors: zhao 13370229059@163.com
 * @FilePath: \dance\util\request\index.js
 */
// 初始化请求配置
import store from '@/store/index.js'; //需要引入store
import { baseURL } from '@/static/common.js';
let { state, commit } = store;
export const Request = () => {
  uni.$uv.http.setConfig(config => {
    /* config 为默认全局配置 */
    config.baseURL = baseURL; /* 根域名 */
    return config;
  });
  // 请求拦截
  uni.$uv.http.interceptors.request.use(
    async config => {
      uni.showLoading({
        title: '请求中'
      });
      setTimeout(() => {
        uni.hideLoading();
      }, 2000);
      // 初始化请求拦截器时，会执行此方法，此时data为undefined，赋予默认{}
      if (!state.vuex_user.current_org && config.url !== 'users/login') {
        uni.$uv.route({
          url: '/pages/login/index',
          type: 'reLaunch'
        });
        return;
      }
      config.data = {
        ...config.data,
        current_org: state.vuex_user.current_org,
        auth_token: state.vuex_user.auth_token,
        current_member: state.vuex_user.current_member
      };
      return config;
    },
    config => Promise.reject(config)
  );
  // 响应拦截
  uni.$uv.http.interceptors.response.use(
    response => {
      uni.hideLoading();
      /* 对响应成功做点什么 可使用async await 做异步操作*/
      const data = response.data;

      // 自定义参数
      const custom = response.config.custom;
      if (data.code !== 0) {
        // 如果没有显式定义custom的toast参数为false的话，默认对报错进行toast弹出提示
        if (custom.toast !== false) {
          uni.$uv.toast(data.message);
        }

        // 如果需要catch返回，则进行reject
        if (custom.catch) {
          return Promise.reject(data);
        } else {
          // 否则返回一个pending中的promise，请求不会进入catch中
          return new Promise(() => {});
        }
      }
      return data.data || data;
    },
    response => {
      // 对响应错误做点什么 （statusCode !== 200）
      return Promise.reject(response);
    }
  );
};
